package com.leenmvc.core.web.controller;

import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import com.leenmvc.core.annotation.ApiDescription;
import com.leenmvc.core.annotation.Note;
import com.leenmvc.core.base.BaseController;
import com.leenmvc.core.base.BaseEntity;
import com.leenmvc.core.base.BaseService;
import com.leenmvc.core.dao.communal.Wrapper;
import com.leenmvc.core.exception.BusinessException;
import com.leenmvc.core.exception.ValidatorException;
import com.leenmvc.core.init.Constant;
import com.leenmvc.core.utils.ConvertUtils;
import com.leenmvc.core.utils.DateUtils;
import com.leenmvc.core.utils.ExcelUtils;
import com.leenmvc.core.utils.TipUtil;
import com.leenmvc.core.utils.collection.MapUtils;
import com.leenmvc.core.utils.http.HttpContextUtils;
import com.leenmvc.core.utils.spring.SpringContextUtils;
import com.leenmvc.core.utils.thread.ThreadLocalManager;
import com.leenmvc.core.utils.validator.ValidatorUtils;
import com.leenmvc.core.base.result.PageData;
import com.leenmvc.core.base.result.Result;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.thymeleaf.exceptions.TemplateInputException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 公共控制器
 * 例如： 角色表 sysRole
 * sys/sysRole/page   获取分页信息  复杂的业务重写 public <T> PageData<T> getPage(Wrapper wrapper)
 * sys/sysRole/sqlPage 获取分页信息（mybatis sql语句） 复杂业务重写 public <T> PageData<T> getPage(String mybatisKey, Map<String, Object> params) {
 * sys/sysRole/getById 根据ID获取角色  复杂业务重写 public <T> T get(Object id)
 * sys/sysRole/getAll  获取全部
 * sys/sysRole/kvs     获取ID,name值对 下拉选通用
 * sys/sysRole/sqlKvs  获取ID，name值对 下拉选通用(由mybatis sql语句提供数据)
 * 如果涉及到复杂的业务 子类中重写 public <T> List<T> listBySqlKey(String id, Object...param)
 * sys/sysRole         POST方法 通用新增    如果涉及到复杂的业务 ，在子类中重写  boolean insert(T t)方法
 * sys/sysRole         PUT方法  通用修改    如果涉及到复杂的业务 ，在子类中重写   boolean update(T t)方法
 * sys/sysRole         DELETE方法 通用删除  如果涉及到复杂的业务 ，在子类中重写   boolean deleteByIds(Long[] ids)方法
 * `
 */
@Controller
@RequestMapping(Constant.COMMON_URL_BASE_VIEW)
@ApiDescription("基础方法公共控制器")
public class SysCommonController extends BaseController {

    private final static Logger logger = LoggerFactory.getLogger(SysCommonController.class);

    @RequestMapping(value = {"/{name}", "/{folder}/{name}"})
    @Note("通过公共方法页面信息")
    public String index(@PathVariable(value = "folder", required = false) String folder, @PathVariable("name") String name) {
        logger.info("本次返回的页面是:{}", name);
        if(folder != null) {
            return folder + "/" + name;
        }
        return name;
    }

}
